//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "pelota.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

Pelota::Pelota(PV * pos, PV* sent, GLdouble r){
              radio=r;
              posicion=pos;
              sentido=sent;
              //circulo=new Circulo(pos,radio);
              velocidad = 5;
              patron = 0x3333;
              gravedad=false;
}
/*void Pelota::draw(){
        GLdouble x,y;
        glColor3f(0.9,0.9,0.9);
        delete circulo->vertices;
        circulo->vertices=new Lista<PV>();
        PV *p1=new PV(posicion->getX()+radio,posicion->getY(),1);
        circulo->vertices->anadir(p1);
        for(int i=1;i<=NITERC;i++){
            x=posicion->getX()+radio*cos((2*M_PI*i)/NITERC);
            y=posicion->getY()+radio*sin((2*M_PI*i)/NITERC);
            p1=new PV(x,y,1);
            circulo->vertices->anadir(p1);
        }

        glBegin(GL_POLYGON);
        glBegin(GL_TRIANGLE_FAN);
        glColor3f(0.9,0.2,0.2);
        glVertex2f(posicion->getX(),posicion->getY());
        glColor3f(0.9,0.9,0.9);

        for(int i=1; i<=circulo->nVertices;i++){
                glVertex2f(circulo->vertices->dameDato(i)->getX(),circulo->vertices->dameDato(i)->getY());

        }
        glEnd();

        //cola
                PV * a = sentido->copiar();
                a->normalizacion();
                a->escalacion(-10.);
                PV *b1;
                b1 = a->copiar();
                b1->escalacion(3);
                a->suma(posicion,a);
                b1->suma(posicion,b1);
                glEnable(GL_LINE_STIPPLE);
                glLineStipple(1, patron);
                glBegin(GL_LINES);
                    glVertex2f(a->getX(),a->getY());
                    glVertex2f(b1->getX(),b1->getY());
                glEnd();
                glDisable(GL_LINE_STIPPLE);
                delete b1;
                delete a;
        //ojo
                a = sentido->copiar();
                PV * orig =new PV(0,0,0);
                a->normalizacion();
                a->escalacion(5.);
                a->rotaP(orig,0.6);
                a->suma(posicion,a);
                glColor3f(0,0,0);
                glPointSize(3);
                glBegin(GL_POINTS);
                        glVertex2i(a->getX(),a->getY());
                glEnd();
                delete a;


        //boca
                a = sentido->copiar();
                a->normalizacion();
                b1 = sentido->copiar();
                b1->normalizacion();
                a->escalacion(5.);
                a->rotaP(orig,-0.5);
                a->suma(posicion,a);
                b1->escalacion(10.);
                b1->rotaP(orig,-0.5);
                b1->suma(posicion,b1);
                glColor3f(0,0,0);
                glPointSize(3);
                glBegin(GL_LINES);
                        glVertex2i(a->getX(),a->getY());
                        glVertex2i(b1->getX(),b1->getY());
                glEnd();
                delete a;
                delete b1;
                delete orig;
                
}    */

void Pelota::avanza(){


        
        posicion->suma(posicion,sentido);

}




void Pelota::setVelocidad(GLdouble v){
        sentido->normalizacion();
        sentido->escalacion(v);
        velocidad = v;
}

void Pelota::choquemotor(PV * normal){
      sentido =  normal->copiar();
      sentido->escalacion(velocidad/2);
      posicion->suma(posicion,sentido);
      sentido->escalacion(2);

}

bool Pelota::invasion(PV * pos,PV * sen,GLdouble rad,PV * &normal){
        GLdouble distancia;
        PV * cc = new PV ();

        cc->vectorDosPV(pos,posicion);
        distancia = cc->modulo();
        //base del motor
        if (distancia <= (radio+rad)){
                cc->vectorDosPV(pos,posicion);
                distancia = cc->modulo();
                sen->normalizacion();
                sen->escalacion(distancia-radio-rad);
                normal->vectorDosPV(posicion,pos);
                normal->normalizacion();
                delete cc;

                return true;
        }
        


        delete cc;

        return false;
}
